package com.x.chalk.service.impl;
////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//            佛祖保佑       永不宕机     永无BUG                   //
////////////////////////////////////////////////////////////////////

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.x.chalk.dao.AddressDao;
import com.x.chalk.dto.AddressDetailDto;
import com.x.chalk.entity.Address;
import com.x.chalk.service.intf.AddressService;
import com.x.chalk.vo.R;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * @author wsc
 * @create 2022-10-05 13:14
 */
@Service
public class AddressServiceImpl implements AddressService {

    @Resource
    private AddressDao dao;

    @Override
    public R add(Address address, String token) {
        if (Objects.nonNull(address)) {
            address.setUid(Long.parseLong(token));
            address.setCtime(new Date());
            if (dao.insert(address) > 0) {
                if (address.getState() == 1) {
                    dao.updateState(address.getId());
                }
                return R.ok();
            }
        }
        return R.fail();
    }

    @Override
    public R del(long id) {
        if (id > 0) {
            if (dao.deleteById(id) > 0) {
                return R.ok();
            }
        }
        return R.fail();
    }

    @Override
    public R queryMy(String token) {
        long uid = Long.parseLong(token);

        QueryWrapper<Address> wrapper = new QueryWrapper<>();
        wrapper.eq("uid", uid);
        wrapper.orderByAsc("state");
        List<Address> list = dao.selectList(wrapper);

        List<AddressDetailDto> dtos = new ArrayList<>();

        list.forEach(a -> {

            AddressDetailDto dto = new AddressDetailDto();
            BeanUtils.copyProperties(a, dto);

            if (a.getState() == 1) {
                dto.isDefault = true;
            }
            dto.setDetail(a.getDetail());
            dto.setAddress(a.getProvince() + a.getCity() + a.getArea() + a.getDetail());
            dto.setTel(a.getPhone());
            dtos.add(dto);
        });
        return R.ok(dtos);
    }

    @Override
    public R selectById(long id) {
        if (id > 0) {
            return R.ok(dao.selectById(id));
        }
        return R.fail();
    }

    @Override
    public R update(Address address) {
        if (Objects.nonNull(address)) {
            if (dao.updateById(address) > 0) {
                return R.ok();
            }
        }
        return R.fail();
    }
}
